
//自定义权重时，默认右边的大，左边的小
//如果左小于<右 证明右的大的优先级大，大根堆
//左>右，小的大 小根堆 

class Solution {
public:
    struct compare
    {
        bool operator()(const pair<int,int>&a,const pair<int,int>& b)
        {
            if(a.first!=b.first)
             return a.second<b.second;

             return a.first>b.first;
        }
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {
        vector<int> ret;
        unordered_map<int,int> hash1;
        for(auto &x:nums)
        {
            hash1[x]++;
        }
        priority_queue<pair<int,int>,vector<pair<int,int>>,compare> heap;
        for(auto pi:hash1)
        {
            heap.push(pi);
        }
        int n=k;
        while(heap.size())
        {
            if(n==0) break;
            int tmp=heap.top().first;
            ret.push_back(tmp);
            heap.pop();
            n--;
        }
        
        return ret;
    }
};